<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>refl-cpp: refl::descriptor::field_descriptor&lt; T, N &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">refl-cpp
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classrefl_1_1descriptor_1_1field__descriptor.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="classrefl_1_1descriptor_1_1field__descriptor-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">refl::descriptor::field_descriptor&lt; T, N &gt; Class Template Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Represents a reflected field.  
 <a href="classrefl_1_1descriptor_1_1field__descriptor.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="refl_8hpp_source.html">refl.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:afcc7c5c7e2ee1a67cab3a6b526d092d2"><td class="memItemLeft" align="right" valign="top">typedef member::value_type&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#afcc7c5c7e2ee1a67cab3a6b526d092d2">value_type</a></td></tr>
<tr class="memdesc:afcc7c5c7e2ee1a67cab3a6b526d092d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type value type of the member.  <a href="classrefl_1_1descriptor_1_1field__descriptor.html#afcc7c5c7e2ee1a67cab3a6b526d092d2">More...</a><br /></td></tr>
<tr class="separator:afcc7c5c7e2ee1a67cab3a6b526d092d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:af003db500839f3ca03b9408bcf76b009"><td class="memTemplParams" colspan="2">template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:af003db500839f3ca03b9408bcf76b009"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#af003db500839f3ca03b9408bcf76b009">operator()</a> (Args &amp;&amp;... args) const noexcept -&gt; decltype(invoker::invoke(std::forward&lt; Args &gt;(args)...))</td></tr>
<tr class="memdesc:af003db500839f3ca03b9408bcf76b009"><td class="mdescLeft">&#160;</td><td class="mdescRight">A synonym for <a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#a616b258509ec4d63ff4d017c63bda9c7" title="Returns the value of the field.">get()</a>.  <a href="classrefl_1_1descriptor_1_1field__descriptor.html#af003db500839f3ca03b9408bcf76b009">More...</a><br /></td></tr>
<tr class="separator:af003db500839f3ca03b9408bcf76b009"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:a616b258509ec4d63ff4d017c63bda9c7"><td class="memTemplParams" colspan="2">template&lt;decltype(nullptr)  = nullptr&gt; </td></tr>
<tr class="memitem:a616b258509ec4d63ff4d017c63bda9c7"><td class="memTemplItemLeft" align="right" valign="top">static constexpr decltype(auto)&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#a616b258509ec4d63ff4d017c63bda9c7">get</a> () noexcept</td></tr>
<tr class="memdesc:a616b258509ec4d63ff4d017c63bda9c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the field.  <a href="classrefl_1_1descriptor_1_1field__descriptor.html#a616b258509ec4d63ff4d017c63bda9c7">More...</a><br /></td></tr>
<tr class="separator:a616b258509ec4d63ff4d017c63bda9c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab43173d6a64770a7e1c1a8db4706bc3f"><td class="memTemplParams" colspan="2">template&lt;typename U &gt; </td></tr>
<tr class="memitem:ab43173d6a64770a7e1c1a8db4706bc3f"><td class="memTemplItemLeft" align="right" valign="top">static constexpr decltype(auto)&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#ab43173d6a64770a7e1c1a8db4706bc3f">get</a> (U &amp;&amp;target) noexcept</td></tr>
<tr class="memdesc:ab43173d6a64770a7e1c1a8db4706bc3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the field.  <a href="classrefl_1_1descriptor_1_1field__descriptor.html#ab43173d6a64770a7e1c1a8db4706bc3f">More...</a><br /></td></tr>
<tr class="separator:ab43173d6a64770a7e1c1a8db4706bc3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr class="memitem:a955e6c913b0427ccfaf99716d22b4f5b"><td class="memItemLeft" align="right" valign="top">static constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#a955e6c913b0427ccfaf99716d22b4f5b">is_static</a> { !std::is_member_object_pointer_v&lt;decltype(member::pointer)&gt; }</td></tr>
<tr class="memdesc:a955e6c913b0427ccfaf99716d22b4f5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the field is static or not.  <a href="classrefl_1_1descriptor_1_1field__descriptor.html#a955e6c913b0427ccfaf99716d22b4f5b">More...</a><br /></td></tr>
<tr class="separator:a955e6c913b0427ccfaf99716d22b4f5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a637571eacbfda7d622f4b9b2a555b7cd"><td class="memItemLeft" align="right" valign="top">static constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#a637571eacbfda7d622f4b9b2a555b7cd">is_writable</a> { !std::is_const_v&lt;<a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#afcc7c5c7e2ee1a67cab3a6b526d092d2">value_type</a>&gt; }</td></tr>
<tr class="memdesc:a637571eacbfda7d622f4b9b2a555b7cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the field is const or not.  <a href="classrefl_1_1descriptor_1_1field__descriptor.html#a637571eacbfda7d622f4b9b2a555b7cd">More...</a><br /></td></tr>
<tr class="separator:a637571eacbfda7d622f4b9b2a555b7cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5a2424645cac6591a1e9cdd66a4a994"><td class="memItemLeft" align="right" valign="top">static constexpr auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#ad5a2424645cac6591a1e9cdd66a4a994">pointer</a> { member::pointer }</td></tr>
<tr class="memdesc:ad5a2424645cac6591a1e9cdd66a4a994"><td class="mdescLeft">&#160;</td><td class="mdescRight">A member pointer to the reflected field of the appropriate type.  <a href="classrefl_1_1descriptor_1_1field__descriptor.html#ad5a2424645cac6591a1e9cdd66a4a994">More...</a><br /></td></tr>
<tr class="separator:ad5a2424645cac6591a1e9cdd66a4a994"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename T, size_t N&gt;<br />
class refl::descriptor::field_descriptor&lt; T, N &gt;</h3>

<p>Represents a reflected field. </p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="afcc7c5c7e2ee1a67cab3a6b526d092d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afcc7c5c7e2ee1a67cab3a6b526d092d2">&#9670;&nbsp;</a></span>value_type</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , size_t N&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">typedef member::value_type <a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html">refl::descriptor::field_descriptor</a>&lt; T, N &gt;::<a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#afcc7c5c7e2ee1a67cab3a6b526d092d2">value_type</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Type value type of the member. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo { <span class="keyword">const</span> <span class="keywordtype">int</span>* x; };</div>
<div class="line">REFL_AUTO(type(Foo), field(x))</div>
<div class="line"> </div>
<div class="line">get_t&lt;0, member_list&lt;Foo&gt;&gt;<a class="code" href="classrefl_1_1descriptor_1_1field__descriptor.html#afcc7c5c7e2ee1a67cab3a6b526d092d2">::value_type</a> -&gt; <span class="keyword">const</span> <span class="keywordtype">int</span>*</div>
</div><!-- fragment --> 
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a616b258509ec4d63ff4d017c63bda9c7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a616b258509ec4d63ff4d017c63bda9c7">&#9670;&nbsp;</a></span>get() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , size_t N&gt; </div>
<div class="memtemplate">
template&lt;decltype(nullptr)  = nullptr&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static constexpr decltype(auto) <a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html">refl::descriptor::field_descriptor</a>&lt; T, N &gt;::get </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the value of the field. </p>
<p>(for static fields). </p><div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar = 1;</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">int</span> baz = 5;</div>
<div class="line">  <span class="keywordtype">void</span> foobar(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> x * 2; }</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">void</span> foobaz(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> x * 3; }</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar), field(baz), func(foobar), func(foobaz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;(), Foo()) -&gt; 1 (Foo().bar)</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; 5 (Foo::baz)</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;2, member_list&lt;Foo&gt;(), Foo(), 10) -&gt; 20 (Foo().foobar())</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;3, member_list&lt;Foo&gt;&gt;()) -&gt; 30 (Foo::foobaz())</div>
</div><!-- fragment --> 
</div>
</div>
<a id="ab43173d6a64770a7e1c1a8db4706bc3f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab43173d6a64770a7e1c1a8db4706bc3f">&#9670;&nbsp;</a></span>get() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , size_t N&gt; </div>
<div class="memtemplate">
template&lt;typename U &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static constexpr decltype(auto) <a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html">refl::descriptor::field_descriptor</a>&lt; T, N &gt;::get </td>
          <td>(</td>
          <td class="paramtype">U &amp;&amp;&#160;</td>
          <td class="paramname"><em>target</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the value of the field. </p>
<p>(for instance fields). </p><div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar = 1;</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">int</span> baz = 5;</div>
<div class="line">  <span class="keywordtype">void</span> foobar(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> x * 2; }</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">void</span> foobaz(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> x * 3; }</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar), field(baz), func(foobar), func(foobaz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;(), Foo()) -&gt; 1 (Foo().bar)</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; 5 (Foo::baz)</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;2, member_list&lt;Foo&gt;(), Foo(), 10) -&gt; 20 (Foo().foobar())</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;3, member_list&lt;Foo&gt;&gt;()) -&gt; 30 (Foo::foobaz())</div>
</div><!-- fragment --> 
</div>
</div>
<a id="af003db500839f3ca03b9408bcf76b009"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af003db500839f3ca03b9408bcf76b009">&#9670;&nbsp;</a></span>operator()()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , size_t N&gt; </div>
<div class="memtemplate">
template&lt;typename... Args&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto <a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html">refl::descriptor::field_descriptor</a>&lt; T, N &gt;::operator() </td>
          <td>(</td>
          <td class="paramtype">Args &amp;&amp;...&#160;</td>
          <td class="paramname"><em>args</em></td><td>)</td>
          <td> const -&gt; decltype(invoker::invoke(std::forward&lt;Args&gt;(args)...))
            </td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>A synonym for <a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#a616b258509ec4d63ff4d017c63bda9c7" title="Returns the value of the field.">get()</a>. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar = 1;</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">int</span> baz = 5;</div>
<div class="line">  <span class="keywordtype">void</span> foobar(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> x * 2; }</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">void</span> foobaz(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> x * 3; }</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar), field(baz), func(foobar), func(foobaz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;(), Foo()) -&gt; 1 (Foo().bar)</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; 5 (Foo::baz)</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;2, member_list&lt;Foo&gt;(), Foo(), 10) -&gt; 20 (Foo().foobar())</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;3, member_list&lt;Foo&gt;&gt;()) -&gt; 30 (Foo::foobaz())</div>
</div><!-- fragment --> 
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a955e6c913b0427ccfaf99716d22b4f5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a955e6c913b0427ccfaf99716d22b4f5b">&#9670;&nbsp;</a></span>is_static</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , size_t N&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool <a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html">refl::descriptor::field_descriptor</a>&lt; T, N &gt;::is_static { !std::is_member_object_pointer_v&lt;decltype(member::pointer)&gt; }</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Whether the field is static or not. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar;</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">int</span> baz;</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar), field(baz))</div>
<div class="line"><a class="code" href="classrefl_1_1descriptor_1_1field__descriptor.html#a955e6c913b0427ccfaf99716d22b4f5b">is_static</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">false</span></div>
<div class="line"><a class="code" href="classrefl_1_1descriptor_1_1field__descriptor.html#a955e6c913b0427ccfaf99716d22b4f5b">is_static</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">true</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a637571eacbfda7d622f4b9b2a555b7cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a637571eacbfda7d622f4b9b2a555b7cd">&#9670;&nbsp;</a></span>is_writable</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , size_t N&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool <a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html">refl::descriptor::field_descriptor</a>&lt; T, N &gt;::is_writable { !std::is_const_v&lt;<a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html#afcc7c5c7e2ee1a67cab3a6b526d092d2">value_type</a>&gt; }</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Whether the field is const or not. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="namespacerefl_1_1descriptor.html#a6127ab327b1e8f31062e9d0e2440a757" title="Checks whether the value type of the field is const-qualified.">refl::descriptor::is_const</a> </dd></dl>

</div>
</div>
<a id="ad5a2424645cac6591a1e9cdd66a4a994"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5a2424645cac6591a1e9cdd66a4a994">&#9670;&nbsp;</a></span>pointer</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , size_t N&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto <a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html">refl::descriptor::field_descriptor</a>&lt; T, N &gt;::pointer { member::pointer }</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>A member pointer to the reflected field of the appropriate type. </p>
<p>When the member is a function, the return value might be nullptr if the type of the function pointer cannot be resolved. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="namespacerefl_1_1descriptor.html#a8d2afa6e939c641de9a9f184388341da" title="Checks whether the function pointer was automatically resolved.">is_resolved</a> </dd>
<dd>
<a class="el" href="namespacerefl_1_1descriptor.html#ad3d6702622d06d0e2f5792f903626790" title="Checks whether the function pointer can be resolved as a pointer of the specified type.">can_resolve</a> </dd>
<dd>
<a class="el" href="namespacerefl_1_1descriptor.html#a1a0a7b34d1892fffb8355aaeff29c750" title="Resolves the function pointer as a pointer of the specified type.">resolve</a></dd></dl>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar;</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">int</span> baz;</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar), field(baz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a75e6a5698114443414d43d3b4ae1c50c">get_pointer</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; (<span class="keywordtype">int</span> Foo::*) &amp;Foo::bar</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a75e6a5698114443414d43d3b4ae1c50c">get_pointer</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; (<span class="keywordtype">int</span>*) &amp;Foo::baz</div>
</div><!-- fragment --> 
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="refl_8hpp_source.html">refl.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="anamespacerefl_1_1descriptor_html_ab17264f6fe5ef2e6f10a67304cb40e83"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">refl::descriptor::invoke</a></div><div class="ttdeci">constexpr auto invoke(MemberDescriptor d, Args &amp;&amp;... args) noexcept -&gt; decltype(d(std::forward&lt; Args &gt;(args)...))</div><div class="ttdoc">Invokes the member with the specified arguments.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2771</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a75e6a5698114443414d43d3b4ae1c50c"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a75e6a5698114443414d43d3b4ae1c50c">refl::descriptor::get_pointer</a></div><div class="ttdeci">constexpr auto get_pointer(MemberDescriptor d) noexcept</div><div class="ttdoc">Returns a pointer to the reflected field/function.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2747</div></div>
<div class="ttc" id="anamespacerefl_1_1trait_html_a90fc62b3597ebdeda8040ff78c0628c3"><div class="ttname"><a href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">refl::trait::get_t</a></div><div class="ttdeci">typename get&lt; N, TypeList &gt;::type get_t</div><div class="ttdoc">The N-th type in the provided type_list.</div><div class="ttdef"><b>Definition:</b> refl.hpp:760</div></div>
<div class="ttc" id="aclassrefl_1_1descriptor_1_1field__descriptor_html_afcc7c5c7e2ee1a67cab3a6b526d092d2"><div class="ttname"><a href="classrefl_1_1descriptor_1_1field__descriptor.html#afcc7c5c7e2ee1a67cab3a6b526d092d2">refl::descriptor::field_descriptor::value_type</a></div><div class="ttdeci">member::value_type value_type</div><div class="ttdoc">Type value type of the member.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2325</div></div>
<div class="ttc" id="aclassrefl_1_1descriptor_1_1field__descriptor_html_a955e6c913b0427ccfaf99716d22b4f5b"><div class="ttname"><a href="classrefl_1_1descriptor_1_1field__descriptor.html#a955e6c913b0427ccfaf99716d22b4f5b">refl::descriptor::field_descriptor::is_static</a></div><div class="ttdeci">static constexpr bool is_static</div><div class="ttdoc">Whether the field is static or not.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2345</div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="namespacerefl.html">refl</a></li><li class="navelem"><a class="el" href="namespacerefl_1_1descriptor.html">descriptor</a></li><li class="navelem"><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html">field_descriptor</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
  </ul>
</div>
</body>
</html>
